range: Use the correct size for scaling
authorMatthias Clasen <mclasen@redhat.com>
Wed, 29 Feb 2012 04:02:01 +0000 (23:02 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 1 Mar 2012 21:29:01 +0000 (16:29 -0500)
When scaling the scroll delta, always use the 'large' dimension
of a range widget. When dx was 0, the code code accidentally
use the small dimension.

gtk/gtkrange.c

index b38fa89da0bae349f6a21676b5755cfd08437aa6..a81b26080fa89f0c2f4507f292b1f708d677d269 100644 (file)
@@ -2803,6 +2803,7 @@ _gtk_range_get_wheel_delta (GtkRange       *range,
   gdouble dx, dy;
   gdouble delta;
   gdouble page_size;
+  gdouble size;
 
   page_size = gtk_adjustment_get_page_size (adjustment);
 
@@ -2812,22 +2813,27 @@ _gtk_range_get_wheel_delta (GtkRange       *range,
 
       gtk_widget_get_allocation (GTK_WIDGET (range), &allocation);
 
+      if (gtk_orientable_get_orientation (GTK_ORIENTABLE (range)) == GTK_ORIENTATION_HORIZONTAL)
+        size = allocation.width;
+      else
+        size = allocation.height;
+
       if (dx != 0 &&
           gtk_orientable_get_orientation (GTK_ORIENTABLE (range)) == GTK_ORIENTATION_HORIZONTAL)
         {
           if (GTK_IS_SCROLLBAR (range) && page_size > 0)
-            delta = dx * page_size / allocation.width;
+            delta = dx * page_size / size;
           else
             delta = dx * (gtk_adjustment_get_upper (adjustment) -
-                          gtk_adjustment_get_lower (adjustment)) / allocation.width;
+                          gtk_adjustment_get_lower (adjustment)) / size;
         }
       else
         {
           if (GTK_IS_SCROLLBAR (range) && page_size > 0)
-            delta = dy * page_size / allocation.height;
+            delta = dy * page_size / size;
           else
             delta = dy * (gtk_adjustment_get_upper (adjustment) -
-                          gtk_adjustment_get_lower (adjustment)) / allocation.height;
+                          gtk_adjustment_get_lower (adjustment)) / size;
         }
     }
   else